const { VITE_API_URL } = import.meta.env;

/**
 * 判断是否是url
 * @param str
 * @returns
 */
export function isUrl(str: string): boolean {
	return str.indexOf('http://') != -1 || str.indexOf('https://') != -1;
}

/**
 * 获取路径
 * @param path
 * @returns
 */
export function getUrl(path: string): string {
    if(isUrl(path)) {
        return path;
    } else {
        return VITE_API_URL ? `${VITE_API_URL}/${path}`: (window.location.protocol + '//' + window.location.host + `/${path}`);
    }
}

/**
 * 是否为数字
 * @param value
 * @returns
 */
export function isNumber(value) {
	return !isNaN(parseFloat(value)) && isFinite(value);
}

/**
 * 时间戳的处理
 * @param dateTime 时间戳
 * @param format 导出格式
 * @returns 返回时间字符串
 */
export function dateToString(dateTime, format = 'yyyy-MM-dd hh:mm:ss') {
	// 如果为null,则格式化当前时间
	if (!dateTime) {
		dateTime = Number(new Date());
	}
	// 如果dateTime长度为10或者13，则为秒和毫秒的时间戳，如果超过13位，则为其他的时间格式
	if (dateTime.toString().length == 10) {
		dateTime *= 1000;
	}

	const date = new Date(dateTime);
	let ret;
	const opt: any = {
		'y+': date.getFullYear().toString(), // 年
		'm+': (date.getMonth() + 1).toString(), // 月
		'd+': date.getDate().toString(), // 日
		'h+': date.getHours().toString(), // 时
		'M+': date.getMinutes().toString(), // 分
		's+': date.getSeconds().toString(), // 秒
	};
	for (const k in opt) {
		ret = new RegExp('(' + k + ')').exec(format);
		if (ret) {
			format = format.replace(ret[1], ret[1].length == 1 ? opt[k] : opt[k].padStart(ret[1].length, '0'));
		}
	}
	return format;
}

/**
 * 比较版本号
 * @param v1 
 * @param v2 
 * @returns 
 */
export function compareVersions(v1, v2) {
    const v1Parts = v1.split('.').map(Number);
    const v2Parts = v2.split('.').map(Number);

    for (let i = 0; i < Math.max(v1Parts.length, v2Parts.length); i++) {
        const v1Part = v1Parts[i] || 0;
        const v2Part = v2Parts[i] || 0;

        if (v1Part > v2Part) return 1;
        if (v1Part < v2Part) return -1;
    }

    return 0;
}

/**
 * 获取文件信息
 * @param data
 * @returns
 */
export function getFileItem(url: string, file: any): {} {
	return { uri: getUrl(url), url: url, name: url.substring(url.lastIndexOf('/') + 1), percentage: 100, progressFlag: false, uid: 0, file: file };
}

/**
 * 获取数据容量单位转换
 * @param bytes
 * @returns
 */
export function bytesToSize(bytes) {
	if (bytes === 0) return '0';
	var k = 1000, // or 1024
		sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
		i = Math.floor(Math.log(bytes) / Math.log(k));

	return (bytes / Math.pow(k, i)).toPrecision(3) + ' ' + sizes[i];
}

/**
 * 下划线转驼峰首字母大/小写
 * @param str
  * @param is_up
 * @returns
 */
export function toStudly(str, is_up = true) {
	str = str.replace(/\_(\w)/g, function (match, letter) {
		return letter.toUpperCase();
	});

    if(is_up) {
        return str.charAt(0).toUpperCase() + str.slice(1);
    } else {
        return str.charAt(0).toLowerCase() + str.slice(1);
    }
}

/**
 * 获取文件重新排序
 * @param data
 * @returns
 */
export function getFileOrder(data: any): any {
	const data_order = []; //重新排序
	data.forEach((item: any) => {
		data_order[item.order_num - 1] = getFileItem(item.url, '');
	});
	return data_order;
}

/**
 * 生成随机数
 * @param min 最小值
 * @param max 最大值
 * @returns 生成的随机数
 */
export function randomNum(min: number, max: number) {
    switch (arguments.length) {
        case 1:
            return parseInt((Math.random() * min + 1).toString(), 10)
            break
        case 2:
            return parseInt((Math.random() * (max - min + 1) + min).toString(), 10)
            break
        default:
            return 0
            break
    }
}

/**
 * 获取文件信息
 * @param fileName
 * @param isIcon
 * @returns
 */
export function getFileInfo(fileName: string, isIcon: boolean) {
	let extName = fileName ? fileName.substring(fileName.lastIndexOf('.') + 1).toLowerCase() : '';
	let type: number, // 1-图片 2-视频 3-文件 4-音频
		typeName: string,
		iconName: string;

	// 文件类型
	if (/(jpg|jpeg|png|gif|bmp)$/.test(extName)) {
		type = 1;
		typeName = 'image';
	} else if (/(mp4|m2v|mkv|rmvb|wmv|avi|flv|mov|m4v)$/.test(extName)) {
		type = 2;
		typeName = 'video';
	} else if (/(zip|rar|doc|docx|pdf|ppt|pptx|txt|xls|xlsx)$/.test(extName)) {
		type = 3;
		typeName = 'file';
	} else if (/(mp3|wav|wmv)$/.test(extName)) {
		type = 4;
		typeName = 'audio';
	} else {
		type = 3;
		typeName = 'file';
	}

	if (!isIcon) {
		return { type: type, typeName: typeName, ext: extName };
	} else {
		// 图标类型
		if (type == 1) {
			iconName = 'image';
		} else if (type == 2) {
			iconName = 'video';
		} else if (type == 3) {
			if (/(zip|rar)$/.test(extName)) {
				iconName = 'package';
			} else if (/(doc|docx)$/.test(extName)) {
				iconName = 'word';
			} else if (/(ppt|pptx)$/.test(extName)) {
				iconName = 'ppt';
			} else if (/(pdf)$/.test(extName)) {
				iconName = 'pdf';
			} else if (/(xls|xlsx)$/.test(extName)) {
				iconName = 'excel';
			} else {
				iconName = 'file';
			}
		} else if (type == 4) {
			iconName = 'audio';
		} else {
			iconName = 'file';
		}

		return { type: type, typeName: typeName, ext: extName, iconName: iconName };
	}
}
